﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ControlsLib;
using System.Linq.Expressions;
using GestionePolveri2.DAL;
using LinqKit;
using FrameworkLib.Filters;

namespace GestionePolveriLib.BL.Reports
{
    public class Filter521 : FilterBase<vw_InventarioMagazzino>, IFilterBase
    {
        private int m_famigliaColoreID = -1;
        private int m_coloreID = -1;
        private int m_polvereID = -1;
        private bool m_giacenzaNulla = false;
        private bool m_giacenzaNonNulla = false;
        private bool m_giacenzaTutte = false;
        private bool m_polveriMovimentate = false;
        private bool m_polveriNonMovimentate = false;
        private bool m_polveriTutte = false;

        public bool GiacenzaNonNulla
        {
            get { return m_giacenzaNonNulla; }
            set { m_giacenzaNonNulla = value; }
        }

        public bool GiacenzaTutte
        {
            get { return m_giacenzaTutte; }
            set { m_giacenzaTutte = value; }
        }

        public bool PolveriMovimentate
        {
            get { return m_polveriMovimentate; }
            set { m_polveriMovimentate = value; }
        }

        public bool PolveriNonMovimentate
        {
            get { return m_polveriNonMovimentate; }
            set { m_polveriNonMovimentate = value; }
        }

        public bool PolveriTutte
        {
            get { return m_polveriTutte; }
            set { m_polveriTutte = value; }
        }

        public bool GiacenzaNulla
        {
            get { return m_giacenzaNulla; }
            set { m_giacenzaNulla = value; }
        }

        public int PolvereID
        {
            get { return m_polvereID; }
            set { m_polvereID = value; }
        }

        public int FamigliaColoreID
        {
            get { return m_famigliaColoreID; }
            set { m_famigliaColoreID = value; }
        }

        public int ColoreID
        {
            get { return m_coloreID; }
            set { m_coloreID = value; }
        }

        public Filter521()
        {

        }

        public override Expression<Func<vw_InventarioMagazzino, bool>> SetUpFilter()
        {
            var predicate = PredicateBuilder.True<vw_InventarioMagazzino>();

            // aggiungi al filtro il controllo sulla data...
            predicate = predicate.And(im => (im.DataDdt >= this.PeriodFrom) && (im.DataDdt <= this.PeriodTo));

            if (PolvereID != -1)
            {
                predicate = predicate.And(im => im.IDPolvere == PolvereID);
            }
            else if (FamigliaColoreID != -1)
            {
                predicate = predicate.And(im => im.IDFamiglia == FamigliaColoreID);
            }
            //else if (ColoreID != -1)
            //{
            //    predicate = predicate.And(im => im.IDFamiglia == FamigliaColoreID);
            //}

            // aggiungi al filtro i flags sulla giacenza...
            if (GiacenzaNonNulla)
            {
                predicate = predicate.And(im => im.Giacenza > 0);
            }
            else if(GiacenzaNulla)
            {
                predicate = predicate.And(im => im.Giacenza == 0);
            }
            else if (GiacenzaTutte)
            { 
            }

            // aggiungi al filtro i flags sulle polveri movimentate...
            if (PolveriMovimentate)
            {
                predicate = predicate.And(im => im.CodCausale.Equals("S") && im.IsMovimentato.Value);
            }
            else if (PolveriNonMovimentate)
            {
                predicate = predicate.And(im => im.CodCausale.Equals("C") && !im.IsMovimentato.Value);
            }
            else if (PolveriTutte)
            {
                predicate = predicate.And(im => im.CodCausale.Equals("C") || im.CodCausale.Equals("S"));
            }

            return predicate;
        }

        //public Expression<Func<Filter521, bool>> GiacenzaFilter()
        //{
        //    if(GiacenzaNonNulla)
        //    return p => !p.Discontinued && p.LastSale > DateTime.Now.AddDays(-30);
        //}
    }
}
